package com.it.od.old2021.deke2;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
import java.util.TreeSet;

/**
 * Created with IntelliJ IDEA.
 * Author: Amos
 * E-mail: amos@amoscloud.com
 * Date: 2021/5/8
 * Time: 19:04
 * Description:  m核cpu n个任务 每次取最大 放到最小，求最小总时长
 */
public class Main56 {
    /*
 为了充分发挥Gpu算力，
 需要尽可能多的将任务交给GPU执行，
 现在有一个任务数组，
 数组元素表示在这1s内新增的任务个数，
 且每秒都有新增任务，
 假设GPU最多一次执行n个任务，
 一次执行耗时1s，
 在保证Gpu不空闲的情况下，最少需要多长时间执行完成。

 输入描述
   第一个参数为gpu最多执行的任务个数
   取值范围1~10000
   第二个参数为任务数组的长度
   取值范围1~10000
   第三个参数为任务数组
   数字范围1~10000

 输出描述
   执行完所有任务需要多少秒

 例子
   输入
    3
    5
    1 2 3 4 5
   输出
  （5 4 3 2 1）
    6

    说明，一次最多执行3个任务  最少耗时6s

  例子2
    输入
     4
     5
     5 4 1 1 1
    输出
     5

   说明，一次最多执行4个任务  最少耗时5s
 */
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int m = Integer.parseInt(in.nextLine().trim()); // m cpu
        int n = Integer.parseInt(in.nextLine().trim());  // n个任务
        String[] split = in.nextLine().split(" ");
        in.close();
        int[] jobs = new int[n];
        for (int i = 0; i < n; i++) {
            jobs[i] = Integer.parseInt(split[i]);
        }
        Arrays.sort(jobs);

        if (n <= m) {
            System.out.println(jobs[jobs.length - 1]);
            return;
        }

        ArrayList<Integer> res = new ArrayList<>();

        for (int i = jobs.length - 1; i >= jobs.length - m; i--) {
            res.add(jobs[i]);
        }

        // 倒序先安排大任务
        for (int i = jobs.length - m-1; i >= 0; i--) {
            Integer min = new ArrayList<>(new TreeSet<>(res)).get(0); // cpu找到流水线总时长最小的时长
            int index = res.indexOf(min); // 找到流水线总时长最小的位置
            res.set(index, res.get(index) + jobs[i]); // 流水线总时长最小的那个任务继续安排新任务
        }

        ArrayList<Integer> r = new ArrayList<>(new TreeSet<>(res));
        System.out.println(r.get(r.size() - 1));

        // m1(n, jobs);
    }

    private static void m1(int n, int[] jobs) {
        int time = 0;
        int more = 0;
        for (int i : jobs) {
            if (i + more > n) {
                more = i + more - n;
            } else {
                more = 0;
            }
            time++;
        }
        while (more > 0) {
            more -= n;
            time++;
        }

        System.out.println(time);
    }
}
